/* Queue.h
 *
 *  Author: Bematech S.A.
 */

#ifndef __BILBAO_UTIL_QUEUE_CLASS_H__
#define __BILBAO_UTIL_QUEUE_CLASS_H__

#include "bilbao/types.h"

/// @ref Capacidade total da fila.
#define BQUEUE_CAPACITY 100

namespace bilbao
{
	namespace util
	{
		/**
		 *
		 */
		template<class T>
		class Queue
		{
		public:
			/**
			 * Construtor Padrão
			 */
			Queue( void );

			/**
			 *
			 */
			void pop( void );

			/**
			 *
			 */
			void push( T );

			/**
			 *
			 */
			bool find( T );

			/**
			 *
			 */
			void print( void );

			/**
			 *
			 */
			inline T front( void )
			{
				return _objs[ini];
			}

			/**
			 *
			 */
			inline T back( void )
			{
				return _objs[(fim - 1) % BQUEUE_CAPACITY];
			}

			/**
			 * Destrutor
			 */
			virtual ~Queue( void );

		private:

			/**
			 */
			T _objs[BQUEUE_CAPACITY];
			//TODO: trocar o nosso vetor por Vector
			//std::vector<T> _objs;

			/**
			 */
			int ini;

			/**
			 */
			int fim;
		};
	} //namespace utils
} //namespace bilbao

#endif //__BILBAO_UTILS_QUEUE_CLASS_H__
